//
// Copyright (c) 2011 Alex Nesterenko
//

#include "nane/core/crt/POSIX/POSIXWriteFile_.h"

#include <cassert>
#include <fcntl.h>
#include <unistd.h>

namespace nane 
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    POSIXWriteFile::POSIXWriteFile( FileSystem::Implementation* _creator, int _interface, const char* _filename )
        : POSIXFileBase( _interface, _filename )
        , SubSystemProduct<FileSystem::Implementation, POSIXWriteFile, IWriteFile>( _creator )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    POSIXWriteFile::~POSIXWriteFile()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool POSIXWriteFile::flush()
    {
        return ::fsync(m_interface) == 0;
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 POSIXWriteFile::write( const byte* _data, uint32 _count )
    {
        // file must be opened
        assert( m_interface != -1 );
        ssize_t bytesWritten = 0;
        bytesWritten = ::write(m_interface, _data, sizeof(byte) * _count);
        return static_cast<uint32>(bytesWritten);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane

